package ar.edu.unlp.info.tesis.database.operator;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Expression;

public class CompareFieldsRestriction extends OperatorRestriction {
	/**
	 * Values: 
	 * equal:e,
	 * leastEqual: le,
	 * least:lt;
	 * greatherEqual:ge,
	 * greather: gt;
	 * 
	 */
	String comparator="e";

	public CompareFieldsRestriction(String field, Object value,String comparator) {
		super(field, value);
		this.comparator=comparator;
	}

	
	
	
	/**
	 * esta restriccion compara un campo de registro contra otro, al igual que
	 * para greater, or least, en el caso de enviar el parametro value como
	 * string, las clases lo tomaran como una propiedad del registro, entonces
	 * la restriccion no se hara contra un valor pasado como parametro sino
	 * contra un valor del propio registro, es decir por ejemplo quiero listar
	 * horas en donde las horas extras sean mayores a las horas normales. el
	 * equal restriccion solo compara contra valores enviados como parametro
	 */
	@Override
	public Criterion getExpresion() {
		if(comparator.equals("e"))	return Expression.eqProperty(this.getField(), (String) this.getValue());
		if(comparator.equals("le"))	return Expression.leProperty(this.getField(), (String) this.getValue());
		if(comparator.equals("lt"))	return Expression.ltProperty(this.getField(), (String) this.getValue());
		if(comparator.equals("ge"))	return Expression.geProperty(this.getField(), (String) this.getValue());
		if(comparator.equals("gt"))	return Expression.gtProperty(this.getField(), (String) this.getValue());
		return null;
	}

}
